perm filename TR[D,SYS] blob sn#320794 filedate 1977-12-08 generic text, type T, neo UTF8
COMMENT ⊗   VALID 00007 PAGES 
RECORD PAGE   DESCRIPTION
 00001 00001
 00002 00002		TITLE	TT	TAPE TEST
 00003 00003		SUBTTL	DATA STORAGE
 00004 00004	BEGIN:	CALLI	0
 00006 00005		SUBTTL	READ
 00008 00006		SUBTTL	WRITE
 00009 00007		SUBTTL	MORE, SMALL ROUTINES
 00011 ENDMK
⊗;
	TITLE	TT	TAPE TEST
A←1
B←2
C←3
D←4

P←17

MTA←←1
PDLEN←←40
	SUBTTL	DATA STORAGE
PDLIST:	BLOCK	PDLEN
IBUF:	BLOCK	3
OBUF:	BLOCK	3
RECSIZ:	0			;SIZE OF RECORD.
FIB1:	0
FIB2:	0
ERRCNT:	0			;COUNT OF READ ERRORS
WORDNO:	0			;WORD NUMBER ON TAPE

BEGIN:	CALLI	0
	MOVE	P,[IOWD PDLEN,PDLIST]
	INIT	MTA,10
	'TTT   '
	XWD	OBUF,IBUF
	JRST	[OUTSTR	[ASCIZ/ASSIGN THE MAG TAPE AS 'TTT' AND RESTART
/]
		CALLI 12]
	UINBF	MTA,[2				;MAKE 2 BUFFERS EACH
		    3001]			;FOR 512 DATA WORDS.
	UOUTBF	MTA,[2
		    3001]
CMDH:	OUTSTR	[ASCIZ/COMMANDS ARE:
W	WRITE DATA
R	READ DATA
U	REWIND TAPE
X	EXIT
2 5 8	SET DENSITY
H	TYPE THIS LIST AGAIN/]

CMD:	OUTSTR	[ASCIZ/
*/]
	TTCALL	4,A
	GETSTS	MTA,B
	TRZ	B,760000
	SETSTS	MTA,(B)
	JRST	CMD2
CMD1:	TTCALL	2,A
	JRST	CMD
CMD2:	CAIN	A,15
	JRST	CMD1
	CAIE	A,12
	CAIN	A,175
	JRST	CMD
	CAIL	A,"A"+40
	CAILE	A,"Z"+40
	JRST	.+2
	SUBI	A,40
	CAIN	A,"H"
	JRST	[OUTSTR	@CMDH
		JRST	CMD1]
	CAIN	A,"U"
	JRST	[MTAPE	MTA,1
		JRST	CMD1]
	CAIN	A,"X"
	CALLI	12
	CAIE	A,"8"
	CAIN	A,"2"
	JRST	DSET
	CAIN	A,"5"
	JRST	DSET
	CAIN	A,"R"
	JRST	READ
	CAIN	A,"W"
	JRST	WRITE
	TTCALL	11,
	JRST	CMDH

DSET:	CAIN	A,"2"
	MOVEI	B,200
	CAIN	A,"5"
	MOVEI	B,400
	CAIN	A,"8"
	MOVEI	B,600
	GETSTS	MTA,A
	TRZ	A,600
	IORI	A,(B)
	SETSTS	MTA,(A)
	JRST	CMD1

	SUBTTL	READ
READ:	PUSHJ	P,GETSIZ		;GET SIZE OF TRANSFER
	PUSHJ	P,GENINI		;INITIALIZE GENERATOR
	SETOM	WORDNO			;INITIALIZE WORD INDEX
	SETZM	ERRCNT			;CLEAR ERROR COUNT
READ1:	PUSHJ	P,GET
	JRST	READX			;EOF
	AOS	WORDNO
	PUSH	P,A
	PUSHJ	P,GENDAT
	CAME	A,(P)
	PUSHJ	P,READ2
	POP	P,A
	SOSLE	RECSIZ
	JRST	READ1
	OUTSTR	[ASCIZ/READ DONE.
/]
	CLOSE	MTA,			;FLUSH FURTHER BUFFERS
	SKIPG	A,ERRCNT
	JRST	CMD1
	PUSHJ	P,DISDEC
	OUTSTR	[ASCIZ/.  ERRORS DETECTED
/]
	JRST	CMD1


READX:	OUTSTR	[ASCIZ/READ: UNEXPECTED END OF FILE.
/]
	CLOSE	MTA,
	JRST	CMD1


READ2:	SKIPG	ERRCNT
	OUTSTR	[ASCIZ/LOC	CORE		TAPE
/]
	PUSH	P,A
	MOVE	A,WORDNO
	PUSHJ	P,DISLOC
	OUTSTR	[ASCIZ/	/]
	POP	P,A
	PUSHJ	P,DISOCT
	OUTSTR	[ASCIZ/	/]
	MOVE	A,-1(P)
	PUSHJ	P,DISOCT
	OUTSTR	[ASCIZ/
/]
	AOS	ERRCNT
	POPJ	P,

	SUBTTL	WRITE
WRITE:	PUSHJ	P,GETSIZ
	PUSHJ	P,GENINI
WRIT1:	PUSHJ	P,GENDAT
	PUSHJ	P,PUT
	SOSLE	RECSIZ
	JRST	WRIT1
	CLOSE	MTA,			;MAKE EOF MARK.
	OUTSTR	[ASCIZ/WRITE DONE.
/]
	JRST	CMD1

REPEAT 1,<

GENINI:	SETZM	FIB1
	MOVEI	A,1
	MOVEM	A,FIB2
	POPJ	P,

GENDAT:	MOVE	A,FIB2
	ADDM	A,FIB1
	EXCH	A,FIB1
	MOVEM	A,FIB2
	POPJ	P,
>
REPEAT 0,<
GENDAT:
GENINI:	MOVE A,[777777,,777777]
	POPJ	P,
>
	SUBTTL	MORE, SMALL ROUTINES
DISLOC:	HRLZ	A,A
	MOVEI	C,6
	JRST	OCTPNT
DISOCT:	MOVEI	C,14
OCTPNT:	SETZ	B,
	ROTC	A,3
	ADDI	B,"0"
	TTCALL	1,B
	SOJG	C,OCTPNT
	POPJ	P,

DISDEC:	IDIVI	A,12
	HRLM	B,(P)
	JUMPE	A,.+2
	PUSHJ	P,DISDEC
	HLRZ	A,(P)
	ADDI	A,"0"
	TTCALL	1,A
	POPJ	P,

PUT:	SOSG	OBUF+2
	OUT	MTA,
	JRST	PUT1
	OUTSTR	[ASCIZ/WRITE ERROR. MT STATUS = /]
	GETSTS	MTA,A
	PUSHJ	P,DISLOC
	OUTSTR	[ASCIZ/
/]
	HALT	CPOPJ

PUT1:	IDPB	A,OBUF+1
	POPJ	P,


GET:	SOSG	IBUF+2
	IN	MTA,
	JRST	GET1
	STATZ	MTA,20000
	POPJ	P,
	OUTSTR	[ASCIZ/MT DETECTED READ ERROR.  STATUS = /]
	GETSTS	MTA,A
	PUSHJ	P,DISLOC
	OUTSTR	[ASCIZ/
/]
	HALT	CPOPJ1

GET1:	ILDB	A,IBUF+1
CPOPJ1:	AOS	(P)
CPOPJ:	POPJ	P,

GETSIZ:	OUTSTR	[ASCIZ/TYPE NUMBER OF WORDS TO TRANSFER: /]
	SETZ	B,
	TTCALL	11,
GETNUM:	TTCALL	4,A
	CAIL	A,"0"
	CAILE	A,"9"
	JRST	GETN1
	IMULI	B,12
	ADDI	B,-"0"(A)
	JRST	GETNUM
GETN1:	MOVEM	B,RECSIZ
	POPJ	P,
	END	BEGIN